// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const openid = wxContext.OPENID

  try {
    // 需要初始化的集合列表
    const collections = [
      'user_stats',       // 存储用户统计数据（新增）
      'images',           // 存储用户创建的图片
      'user_likes',       // 存储用户点赞记录
      'user_favorites',   // 存储用户收藏记录
      'user_comments',    // 存储用户评论
      'users'             // 存储用户资料（根据数据库现有结构）
    ]

    // 确保所有需要的集合都存在
    const createCollectionsPromises = collections.map(async collectionName => {
      try {
        // 尝试查询集合，看它是否存在
        await db.collection(collectionName).limit(1).get()
        return { name: collectionName, exists: true }
      } catch (error) {
        // 针对集合不存在的错误码，尝试创建集合
        if (error.errCode === -502005 || 
            error.errCode === 'DATABASE_COLLECTION_NOT_EXIST' || 
            error.message && (
              error.message.includes('collection.get:fail') || 
              error.message.includes('DATABASE_COLLECTION_NOT_EXIST')
            )) {
          console.log(`集合 ${collectionName} 不存在，正在创建...`)
          
          // 创建集合
          try {
            await db.createCollection(collectionName)
            return { name: collectionName, exists: false, created: true }
          } catch (createError) {
            console.error(`创建集合 ${collectionName} 失败:`, createError)
            return { 
              name: collectionName, 
              exists: false, 
              created: false, 
              error: createError.message 
            }
          }
        } else {
          console.error(`检查集合 ${collectionName} 时出错:`, error)
          return { 
            name: collectionName, 
            exists: false, 
            error: error.message 
          }
        }
      }
    })

    // 等待所有集合检查/创建操作完成
    const collectionsStatus = await Promise.all(createCollectionsPromises)

    // 初始化用户统计数据
    try {
      // 检查用户统计数据是否已存在
      const userStatsCheck = await db.collection('user_stats')
        .where({ _openid: openid })
        .count()
      
      if (userStatsCheck.total === 0) {
        // 创建用户统计数据
        await db.collection('user_stats').add({
          data: {
            _openid: openid,
            works: 0,
            collections: 0,
            likes: 0,
            likesGiven: 0,
            favoritesReceived: 0,
            createTime: db.serverDate(),
            updateTime: db.serverDate()
          }
        })
        
        console.log('创建用户统计数据成功')
      }
    } catch (statsError) {
      console.error('创建用户统计数据失败:', statsError)
    }

    return {
      success: true,
      message: '初始化用户统计数据库成功',
      collectionsStatus,
      openid
    }
  } catch (error) {
    console.error('初始化用户统计数据库失败:', error)
    return {
      success: false,
      message: '初始化用户统计数据库失败: ' + error.message,
      error
    }
  }
} 